//class Solution {
//    public static int maximalSquare(char[][] matrix) {
//        int row= matrix.length;
//        int col=matrix[0].length;
//        int max=0;
//        for(int i=0;i<row;i++) {
//            for(int n=0;n<col;n++) {
//                if(matrix[i][n]=='1') {
//                    max=Math.max(max,1);
//                    if(i+1<row && n+1<col) {
//                        max=Math.max(IsBig(matrix,i,n,1,1)*IsBig(matrix,i,n,1,1),max);
//                    }
//                }
//            }
//        }
//        return max;
//    }
//    public static int IsBig(char[][] matrix,int prow,int pcol,int len,int ret) {
//
//        for(int i=prow;i<=prow+len;i++) {
//            for(int n=pcol;n<=pcol+len;n++) {
//                if(matrix[i][n]!='1') {
//                    return 0;
//                }
//            }
//        }
//        ret+=1;
//        if(prow+len+1<matrix.length && pcol+len+1<matrix[0].length) {
//            IsBig(matrix,prow,pcol,len+1,ret);
//        } else {
//            return ret;
//        }
//    }
//
//    public static void main(String[] args) {
//        char[][] martix = {{'1','1','1'},{'1','1','1'},{'1','1','1'}};
//        System.out.println(maximalSquare(martix));
//
//    }
//}
class Solution {
    public static int maximalSquare(char[][] matrix) {
        int row=matrix.length;
        int maxlen=0;
        int col=matrix[0].length;
        int[][] ret=new int[row][col];
        for(int i=0;i<row;i++) {
            for(int n=0;n<col;n++) {
                if(matrix[i][n]=='1') {
                    if(i==0 || n==0) {
                        ret[i][n]=1;
                    } else {
                        ret[i][n]=Math.min(Math.min(ret[i-1][n],ret[i][n-1]),ret[i-1][n-1])+1;
                    }
                }
                maxlen=Math.max(maxlen,ret[i][n]);
            }
        }
        return maxlen*maxlen;
    }

    public static void main(String[] args) {
        char[][] arr= {{'1','1','1','1','1'},{'1','1','1','1','0'},{'1','1','1','1','1'},{'1','1','1','1','1'},{'0','0','1','1','1'}};
        System.out.println(maximalSquare(arr));
    }
}
public class lc221 {
}
